import java.util.Scanner;

// s and the denominators
class Rational {
    private long numerator; // 分子
    private long denominator; // 分母
    private long integer; // 整数部分
    private boolean negetive = false; // 负数
    private boolean isZero = false; // 分母为零
    private long totalNumerator; // 参与运算的分子：整数+原来分子

    public static long paraseNumerator(String s) {
        //只需从字符串中将分子截取出来
        return Long.parseLong(s.substring(0, s.indexOf('/')));
    }

    public static long paraseDenominator(String s) {
        //只需从字符串中将分子截取出来
        return Long.parseLong(s.substring(s.indexOf('/') + 1, s.length()));
    }

    public Rational(long n, long d) {
        // 在输入的时候分母永远不可能为0，但是经过计算之后分母可能会为0
        if (0 == d) {
            isZero = true;
            return;
        }

        // 如果分子小于0，表示为负数
        if (n < 0) {
            negetive = !negetive;
        }

        // 在输入的时候，分母永远不可能小于0，但是经过计算之后分母也可能会小于0
        if (d < 0) {
            negetive = !negetive;
        }

        // 如果输入是假分数，需要将其调整为真分数,比如：5 / 3 ===> 1 2/3
        integer = n / d;
        numerator = n - integer * d;
        denominator = Math.abs(d);

        // 如果分数不是最简的形式，需要将其约分为最简的形式，比如：10 / 15--->2/3
        // 在分子和分母的基础之上分别处以分子和分母的最大公约数
        if (numerator > 1 || numerator < -1) {
            long gcd = calcGCD(Math.abs(numerator), denominator);
            if (gcd > 0) {
                numerator /= gcd;
                denominator /= gcd;
            }
        }
        totalNumerator = numerator + integer * denominator;
    }

    // 求最大公约数：采用辗转相除法
    private long calcGCD(long a, long b) {
        if (0 == b) {
            return a;
        }

        return calcGCD(b, a % b);
    }

    public Rational Add(Rational r) {
        long n = totalNumerator * r.denominator + denominator * r.totalNumerator;
        long d = denominator * r.denominator;
        return new Rational(n, d);
    }

    public Rational Sub(Rational r) {
        long n = totalNumerator * r.denominator - denominator * r.totalNumerator;
        long d = denominator * r.denominator;
        return new Rational(n, d);
    }

    public Rational Mul(Rational r) {
        long n = totalNumerator * r.totalNumerator;
        long d = denominator * r.denominator;
        return new Rational(n, d);
    }

    public Rational Div(Rational r) {
        long n = totalNumerator * r.denominator;
        long d = denominator * r.totalNumerator;
        return new Rational(n, d);
    }

    public String toString() {
        StringBuffer s = new StringBuffer();
        // 分母为0，输出Inf
        if (isZero) {
            s.append("Inf");
            return new String(s);
        }

        // 如果结果为0
        if (0 == integer && 0 == numerator) {
            s.append("0");
            return new String(s);
        }

        if (negetive) {
            s.append("(-");
        }
        // 输出Rational： 整数部分 + 分数部分
        // 整数部分
        if (0 != integer) {
            s.append(Math.abs(integer));

            // 整数部分和分数部分需要使用空格隔开
            if (0 != numerator) {
                s.append(' ');
            }
        }

        // 分数部分: 可能存在，也可能不存在
        if (0 != numerator) {
            s.append(Math.abs(numerator));
            s.append('/');
            s.append(denominator);
        }

        if (negetive) {
            s.append(')');
        }
        return new String(s);
    }
}

public class Day36_5 {
    public static void main(String[] args) {
        // 循环输入处理多组测试用例
        Scanner sc = new Scanner(System.in);
        while (sc.hasNext()) {

            // 接收一组用例
            String s = sc.next();
            Rational r1 = new Rational(Rational.paraseNumerator(s),
                    Rational.paraseDenominator(s));

            s = sc.next();
            Rational r2 = new Rational(Rational.paraseNumerator(s),
                    Rational.paraseDenominator(s));

            // Add Sub Mul Div, toString()
            System.out.println(r1 + " + " + r2 + " = " + r1.Add(r2));
            System.out.println(r1 + " - " + r2 + " = " + r1.Sub(r2));
            System.out.println(r1 + " * " + r2 + " = " + r1.Mul(r2));
            System.out.println(r1 + " / " + r2 + " = " + r1.Div(r2));
        }
    }
}

